﻿#pragma once

#include <memory>

#include "G4VModularPhysicsList.hh"  //一般用户自定义的PhysicsList类继承于此
//#include "globals.hh"

class G4VPhysicsConstructor;
class PhysicsListMessenger;

class PhysicsList : public G4VModularPhysicsList
{
public:
    PhysicsList();
    ~PhysicsList() override;

private:
    PhysicsList& operator=(const PhysicsList& right)=delete;
    PhysicsList(const PhysicsList&)=delete;

    //========================= overlay implementation
public:
    void ConstructParticle() override;
    void ConstructProcess() override;

    void AddPhysicsList(const G4String&);
    void SetCuts() override;  // 设置粒子截断

private:
    std::unique_ptr<G4VPhysicsConstructor> _fEmPhysicsList;
    std::unique_ptr<G4VPhysicsConstructor> _fDecayList;
    std::vector<G4VPhysicsConstructor*> _fHadronPhys;

private:
    std::unique_ptr<PhysicsListMessenger> _messenger;
};
